//package com.zxw.cloud.gateway.handler;
//
//import com.zxw.cloud.gateway.provider.ResponseProvider;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.boot.autoconfigure.web.ErrorProperties;
//import org.springframework.boot.autoconfigure.web.ResourceProperties;
//import org.springframework.boot.autoconfigure.web.reactive.error.DefaultErrorWebExceptionHandler;
//import org.springframework.boot.web.reactive.error.ErrorAttributes;
//import org.springframework.context.ApplicationContext;
//import org.springframework.http.HttpStatus;
//import org.springframework.web.reactive.function.server.*;
//
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * 自定义全局异常处理
// *
// * <p>异常时用JSON代替HTML异常信息<p>
// *
// * @author zouxw
// *
// */
//@Slf4j
//public class JsonExceptionHandler extends DefaultErrorWebExceptionHandler {
//
//    public JsonExceptionHandler(ErrorAttributes errorAttributes, ResourceProperties resourceProperties,
//                                ErrorProperties errorProperties, ApplicationContext applicationContext) {
//        super(errorAttributes, resourceProperties, errorProperties, applicationContext);
//    }
//
//    /**
//     * 获取异常属性
//     */
//    @Override
//    protected Map<String, Object> getErrorAttributes(ServerRequest request, boolean includeStackTrace) {
//
//        int code = 500;
//        String message = "服务器异常，请联系开发人员！";
//
//        Throwable error = super.getError(request);
//        if (error instanceof org.springframework.cloud.gateway.support.NotFoundException) {
//            code = 404;
//            message = "未找到服务";
//        }else if (error instanceof NullPointerException){
//            code = 401;
//            message = "未经授权";
//        }
//
//        log.error("全局异常：{}", message);
//        return  ResponseProvider.response(code, message);
//    }
//
//    /**
//     * 指定响应处理方法为JSON处理的方法
//     * @param errorAttributes
//     */
//    @Override
//    protected RouterFunction<ServerResponse> getRoutingFunction(ErrorAttributes errorAttributes) {
//        return RouterFunctions.route(RequestPredicates.all(), this::renderErrorResponse);
//    }
//
//    /**
//     * 根据code获取对应的HttpStatus
//     * @param errorAttributes
//     */
//    @Override
//    protected HttpStatus getHttpStatus(Map<String, Object> errorAttributes) {
//        int statusCode = (int) errorAttributes.get("code");
//        log.error("StatusCode:{}",statusCode);
//        return HttpStatus.valueOf(statusCode);
//    }
//
//}